//
// IOperand.hpp for  in /home/renardg/Dropbox/epitech/dev/projets/c++/AbstractVM/abstract-vm-epi
// 
// Made by guillaume renard
// Login   <renard_g@epitech.net>
// 
// Started on  Mon Feb 06 11:34:31 2012 guillaume renard
// Last update Tue Feb  7 15:12:01 2012 Florian.Noirbent
//

#ifndef __IOPERAND_HH__
#define __IOPERAND_HH__

#include <string>

class IOperand
{
public:
  typedef enum { INT8, INT16, INT32, FLOAT, DOUBLE} eOperandType;

  virtual std::string const & toString() const = 0;

  virtual int getPrecision() const = 0;
  virtual eOperandType getType() const = 0;

  virtual IOperand * operator+(const IOperand &rhs) const = 0;
  virtual IOperand * operator-(const IOperand &rhs) const = 0;
  virtual IOperand * operator*(const IOperand &rhs) const = 0;
  virtual IOperand * operator/(const IOperand &rhs) const = 0;
  virtual IOperand * operator%(const IOperand &rhs) const = 0;

  virtual ~IOperand() {}
};

#endif
